<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>

<#--
    1. <#list></#list>标签对相当于是for循环遍历list, phones是被迭代对象, phone是迭代子, as是语法固定, ${}是取值表达式
    2. <#if phones?exists>相当于是判断phones对象是否存在
    3. 在引入freemarker之后, 页面的注释如果是普通的则不增在其中包含freemarker语法, 否则会报错;
        - 推荐使用freemarker的注释语法, 就是将传统的注释中的!换成#即可; 并且这样的注释客户端不可见.
    4. 请求方式为: http://localhost/freemarker/list
    5. ${phones?size}这样相当于是取出集合元素的个数, 相当于是调用了List.size()方法.
    6. <#if phones?exists && phones?size != 0>中有以下几点需要注意:
        - freemarker支持逻辑表达式
            1. &&  -> 逻辑与;
            2. ||  -> 逻辑或;
            3. !   -> 逻辑非;
        - 比较运算符
            1. =（或者==）：判断两个值是否相等；
            2. !=：判断两个值是否不相等；
                - 注： =和!=可以用作字符串、数值和日期的比较，但两边的数据类型必须相同。而且FreeMarker的比较是精确比较，不会忽略大小写及空格。
            3. > （或者gt） ：大于
            4. >=（或者gte）：大于等于
            5. < （或者lt） ：小于
            6. <=（或者lte）：小于等于
            7. 注： 上面这些比较运算符可以用于数字和日期，但不能用于字符串。大部分时候，使用gt比>有更好的效果，因为FreeMarker会把>解释成标签的结束字符。可以使用括号来避免这种情况，如：<#if (x>y)>。
    7. if判断可以嵌套, 但是在使用中一定要注意标签名称书写规范, 否则会报错.
        - 还可以嵌套<#elseif boolean条件>表达式.
    8. 在迭代过程中, 直接给迭代子加上"_index"就可以获取下标, 而加上"_has_next"可以判断是否有下一项.
-->

<#if phones?exists && phones?size != 0>
<#list phones as phone>
    当前索引: ${phone_index}
    是否有下一项:
    <#if phone_has_next>
        有下一项
    <#else>
        没有下一项了
    </#if>
    手机id: ${phone.id} + 手机名称: ${phone.name} +
    手机价格:
    <#if phone.price gt 2000>
    手机价格大于2000
    <#else>
    手机价格小于等于2000
    </#if>
    +
    ${phone.timeToMarket?string("yyyy-MM-dd HH:mm:ss")} + ${phones?size}
    <br />

</#list>
</#if>

<#--
    1. 需要注意的是, freemarker会自动拼接项目"所在路径/src/main/resources/templates"+标签指定的路径, 所以直接写相对于templates文件夹的绝对路径即可.
-->
<#include "/freemarker/Hello.html" />


</body>
</html>